Avoid loading the ISO8859-1 iconv module. We're already doing all the
authorAlexander Larsson <alexl@redhat.com>
Mon, 12 Nov 2007 15:51:55 +0000 (15:51 +0000)
committerAlexander Larsson <alexl@src.gnome.org>
Mon, 12 Nov 2007 15:51:55 +0000 (15:51 +0000)
2007-11-12  Alexander Larsson  <alexl@redhat.com>

        * gdk/x11/gdkselection-x11.c:
Avoid loading the ISO8859-1 iconv module.
We're already doing all the required work anyway.
This saves 4kb private dirty memory per gtk+ process

svn path=/trunk/; revision=18986

ChangeLog
gdk/x11/gdkselection-x11.c

index 2cad15f1a3ed59fd801e5eaf74687124a33e9e89..29d6050b8a9245b88be9fbe8dc5587789eea6415 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-12  Alexander Larsson  <alexl@redhat.com>
+
+        * gdk/x11/gdkselection-x11.c:
+       Avoid loading the ISO8859-1 iconv module.
+       We're already doing all the required work anyway.
+       This saves 4kb private dirty memory per gtk+ process
+
 2007-11-11  Yevgen Muntyan  <muntyan@tamu.edu>
 
        * gtk/gtktextview.c: Moved gtk_text_view_update_im_spot_location()
index c15d1f5abfbce5a68b79a4cbe41ef492c0028a7d..88d2729ca078c100ac46da4876fdd47329633aba 100644 (file)
@@ -727,7 +727,8 @@ gdk_string_to_compound_text_for_display (GdkDisplay  *display,
  * from the input string and also canonicalizes \r, and \r\n to \n
  */
 static gchar * 
-sanitize_utf8 (const gchar *src)
+sanitize_utf8 (const gchar *src,
+              gboolean return_latin1)
 {
   gint len = strlen (src);
   GString *result = g_string_sized_new (len);
@@ -746,13 +747,26 @@ sanitize_utf8 (const gchar *src)
       else
        {
          gunichar ch = g_utf8_get_char (p);
-         char buf[7];
-         gint buflen;
          
          if (!((ch < 0x20 && ch != '\t' && ch != '\n') || (ch >= 0x7f && ch < 0xa0)))
            {
-             buflen = g_unichar_to_utf8 (ch, buf);
-             g_string_append_len (result, buf, buflen);
+             if (return_latin1)
+               {
+                 if (ch <= 0xff)
+                   g_string_append_c (result, ch);
+                 else
+                   g_string_append_printf (result,
+                                           ch < 0x10000 ? "\\u%04x" : "\\U%08x",
+                                           ch);
+               }
+             else
+               {
+                 char buf[7];
+                 gint buflen;
+                 
+                 buflen = g_unichar_to_utf8 (ch, buf);
+                 g_string_append_len (result, buf, buflen);
+               }
            }
 
          p = g_utf8_next_char (p);
@@ -779,21 +793,7 @@ sanitize_utf8 (const gchar *src)
 gchar *
 gdk_utf8_to_string_target (const gchar *str)
 {
-  GError *error = NULL;
-  
-  gchar *tmp_str = sanitize_utf8 (str);
-  gchar *result =  g_convert_with_fallback (tmp_str, -1,
-                                           "ISO-8859-1", "UTF-8",
-                                           NULL, NULL, NULL, &error);
-  if (!result)
-    {
-      g_warning ("Error converting from UTF-8 to STRING: %s",
-                error->message);
-      g_error_free (error);
-    }
-  
-  g_free (tmp_str);
-  return result;
+  return sanitize_utf8 (str, TRUE);
 }
 
 /**
@@ -832,7 +832,7 @@ gdk_utf8_to_compound_text_for_display (GdkDisplay  *display,
 
   need_conversion = !g_get_charset (&charset);
 
-  tmp_str = sanitize_utf8 (str);
+  tmp_str = sanitize_utf8 (str, FALSE);
 
   if (need_conversion)
     {